﻿using System;
using System.Linq;
using System.Globalization;
using Autofac;
using ComputerVision.BaseForm;
using ComputerVision.Common;
using ComputerVision.Data;
using ComputerVision.Services;

namespace ComputerVision.VeXeForm
{
    public partial class frmVeXeDetail : frmDetail
    {
        private readonly IService<VeXe> _veXeService;
        private readonly IService<LoaiVe> _loaiVeXeService;
        public frmVeXeDetail()
        {
            InitializeComponent();
            _veXeService = Program.Container.Resolve<IService<VeXe>>();
            _loaiVeXeService = Program.Container.Resolve<IService<LoaiVe>>();
            Text = @"Thêm mới Loại xe";
            txtSoVe.Focus();
            LoadLoaiVe();
            LoadStatus();
            cmbStatus.SelectedItem = cmbStatus.Items[0];

        }

        public frmVeXeDetail(string ids)
        {
            InitializeComponent();
            _veXeService = Program.Container.Resolve<IService<VeXe>>();
            _loaiVeXeService = Program.Container.Resolve<IService<LoaiVe>>();
            Text = @"Sửa Loại xe";
            txtSoVe.Focus();
            LoadLoaiVe();
            LoadStatus();

            _fromtype = Constants.TypeForm.Edit;
            idS = ids;

            var item = _veXeService.Detail(idS);
            if (item != null)
            {
                txtSoVe.Text = item.SoVe.ToString();
                //txtSoVe.Text = item.SoVe.ToString();
                cmbLoaive.SelectedValue = item.LoaiVeId;
                cmbStatus.Text = item.Status;
            }
        }

        private void LoadLoaiVe()
        {
            cmbLoaive.DataSource = _loaiVeXeService.ToList().ToList();
            cmbLoaive.DisplayMember = "TenLoai";
            cmbLoaive.ValueMember = "Id";
        }

        #region Validation

        protected override bool Validator()
        {

            errorProvider.Dispose();

            if (string.IsNullOrEmpty(txtSoVe.Text.Trim()))
            {
                errorProvider.SetError(txtSoVe, "Bạn chưa nhập số vé. Xin vui lòng kiểm tra lại");
                return false;
            }

            if (!string.IsNullOrEmpty(txtSoVe.Text.Trim()))
            {
                int result;
                if (!int.TryParse(txtSoVe.Text.Trim(), out result))
                {
                    errorProvider.SetError(txtSoVe, "Bạn nhập số vé không hợp lệ. Xin vui lòng kiểm tra lại");
                    return false;
                }
            }
            if (_fromtype != Constants.TypeForm.Edit)
            {
                var item = _veXeService.ToList().ToList().Where(p => p.SoVe.Trim().Equals(txtSoVe.Text.Trim()));
                if (item.Any())
                {
                    errorProvider.SetError(txtSoVe, "Số vé này đã tồn tại. Xin vui lòng kiểm tra lại");
                    return false;

                }
            }

            return true;
        }

        #endregion

        protected override void Insert()
        {
            try
            {
                var model = new VeXe
                {
                    SoVe = txtSoVe.Text.Trim(),
                    Status = cmbStatus.Text,
                    LoaiVeId = int.Parse(cmbLoaive.SelectedValue.ToString()),
                    Created = DateTime.Now,
                    CreatedBy = Constants.CurrentUser,
                    Modified = DateTime.Now,
                    ModifiedBy = Constants.CurrentUser
                };
                _veXeService.Create(model);
            }
            catch (Exception ex)
            {
                AlertList.Error("Lỗi phát sinh khi tạo mới dữ liệu.");
            }
        }

        #region Edit

        protected override void Edit()
        {
            var item = _veXeService.Detail(idS);
            if (item != null)
            {
                //item.SoVe = txtSoVe.Text.Trim();
                item.LoaiVeId = int.Parse(cmbLoaive.SelectedValue.ToString());
                item.Status = cmbStatus.Text;
                item.Modified = DateTime.Now;
                item.ModifiedBy = Constants.CurrentUser;
                _veXeService.Update(item);
            }
        }

        #endregion

        private void txtSoVe_TextChanged(object sender, EventArgs e)
        {
            if (txtSoVe.Text.Length == 10)
            {
                btnSave.PerformClick();
                txtSoVe.SelectAll();
            }
        }

        private void txtSoVe_MouseEnter(object sender, EventArgs e)
        {
            txtSoVe.SelectAll();
        }

        private void txtSoVe_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            txtSoVe.SelectAll();
        }

        private void LoadStatus()
        {
            cmbStatus.Items.Add(Constants.StatusVeXe.Active);
            cmbStatus.Items.Add(Constants.StatusVeXe.InActive);
            cmbStatus.Items.Add(Constants.StatusVeXe.MatVe);
        }

    }
}
